package mysql8学习.高级.第12章_数据库调优的其他策略;

/**
 * 3.7 分析表、检查表与优化表
 * MySQL提供了 分析表、检查表和优化表的语句。
 *      分析表 主要是分析关键字的分布，
 *      检查表 主要是检查表是否存在错误，
 *      优化表 主要是消除删除或者更新造成的空间浪费。
 *
 * 1.分析表  ANALYZE TABLE 表名;//会更新 SHOW  INDEX FROM 表名 的数据
 *   SHOW  INDEX FROM 表名;//显示来自的索引
 *   使用ANALYZE TABLE 分析表的过程中，数据库系统会自动对表加一个只读锁。
 *   在分析期间，只能读取表中的记录,不能更新和插入记录。
 *   ANALYZE TABLE语句能够分析InnoDB和MyISAM类型的表,但是不能作用于视图。
 *   ANALYZE TABLE分析后的统计结果会反应到cardinality(此索引有多少不同的值)的值，
 *   该值统计了表中某一键所在的列不重复的值的个数。
 *   该值越接近表中的总行数，则在表连接查询或者索引查询时，就越优先被优化器选择使用。
 *   也就是索引列的cardinality的值与表中数据的总条数差距越大，
 *   即使查询的时候使用了该索引作为查询条件,存储弓|擎实际查询的时候使用的概率就越小。
 *
 * 2.检查表
 * MySQL中可以使用CHECK TABLE 语句来检查表。
 * CHECK TABLE语句能够检查InnoDB和MyISAM类型的表是否存在错误。
 * CHECK TABLE语句在执行过程中也会给表加上只读锁。
 * 对于MyISAM类型的表，CHECK TABLE语句还会更新关键字统计数据。
 * 而且，CHECK TABLE也可以检查视图是否有错误，比如在视图定义中被引用的表已不存在。
 *
 * CHECK TABLE 表名1,表名2...表名N  [参数];
 * 参数
 * ● QUICK :不扫描行，不检查错误的连接。
 * ● FAST: 只检查没有被正确关闭的表。
 * ● CHANGED: 只检查上次检查后被更改的表和没有被正确关闭的表。
 * ● MEDIUM: 扫描行，以验证被删除的连接是有效的。
 *   也可以计算各行的关键字校验和，并使用计算出的校验和验证这一点。
 * ● EXTENDED: 对每行的所有关键字进行一个全面的关键字查找。
 *   这可以确保表是100%一致的，但是花的时间较长。
 *  参数 只对MyISAM类型的表有效，对InnoDB类型的表无效。比如:
 *
 * 3.优化表
 * 方式1: OPTIMIZE TABLE 表名;
 * MySQL中使用 OPTIMIZE TABLE 语句来优化表。
 * 但是，OPTIMIZE TABLE 语句只能优化表中的VARCHAR、BLOB或TEXT类型的字段。
 * 一个表使用了这些字段的数据类型,若已经删除了表的一大部分数据，
 * 或者已经对含有可长度行的表(含有VARCHAR、 BLOB或TEXT列的表) 进行了很多更新，
 * 则应使用OPTIMIZE TABLE来重新利用未使用的空间，并整理数据文件的碎片。
 * 说明:
 *    在多数的设置中，根本不需要运行 OPTIMIZE TABLE。
 *    即使对可变长度的行进行了大量的更新，也不需要经常运行，
 *    每周一次或每月一次即可，并且只需要对特定的表运行。
 *    他会进行碎片的整理，减少内存消耗
 *
 * 方式2: mysqlcheck -o 数据库名 表名;
 *       mysqlcheck -o 数据库名;//优化这个数据库所有表
 *
 */
public class C7_分析表_检查表与优化表 {
}